﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BL.Entities;
namespace zCO
{
    public partial class frmABMObraSocial : Form
    {
        ObraSocial oS;
        bool IsUpdate = false;
        public frmABMObraSocial()
        {
            InitializeComponent();
        }

        public frmABMObraSocial(ObraSocial pOS)
        {
            InitializeComponent();
            IsUpdate = true;
            oS = pOS;
            txtCodPostal.Text = oS.CodigoPostal;
            txtDireccion.Text = oS.Domicilio;
            txtFax.Text = oS.Fax;
            txtLocalidad.Text = oS.Localidad;
            txtMail.Text = oS.Mail;
            txtNombre.Text = oS.NombreObra;
            txtTelefono.Text = oS.Telefono;
            txtNroPrestador.Text = oS.NroPrestador;

        }
     


        private void cmdAceptar_Click(object sender, EventArgs e)
        {
            if (txtNombre.Text  == "")
            {
                MessageBox.Show("El Campo Nombre no puede ser vacio");
            }
            else {

                oS.CodigoPostal = txtCodPostal.Text;
                oS.Domicilio = txtDireccion.Text;
                oS.Fax = txtFax.Text;
                oS.Localidad = txtLocalidad.Text;
                oS.Mail = txtMail.Text;
                oS.NombreObra = txtNombre.Text;
                oS.Telefono = txtTelefono.Text;
                oS.NroPrestador = txtNroPrestador.Text;

                int ind = 0;
                Int32 aux;
                Double precio;
                PrecioPrestacion pP;
                PrecioPrestacion pPOld;
                ColeccionPrecioPrestaciones cP = new ColeccionPrecioPrestaciones();
                if (IsUpdate)
                {
                    try
                    {
                        oS.SaveUpdate();
                    }
                    catch (Exception)
                    {

#warning no esta funcionando el update......
                    }
                }
                else
                {
                    oS.Save();
                }
                
                foreach (var item in dgvPrestaciones.Rows)
                {
                    if (dgvPrestaciones[0, ind].Value != null && dgvPrestaciones[1, ind].Value != null && dgvPrestaciones[2, ind].Value != null)
                    {

                        pP = new PrecioPrestacion();

                        if (Int32.TryParse(dgvPrestaciones[0, ind].Value.ToString(), out aux) && Double.TryParse(dgvPrestaciones[2, ind].Value.ToString(), out precio))
                        {
                            pP.Precio = precio;
                            pP.Prestacion = ColeccionPrestaciones.Current.FindByID(aux.ToString());
                            if (oS.PrecioPrestaciones == null) {
                                oS.PrecioPrestaciones = new ColeccionPrecioPrestaciones();
                            }
                            pPOld = oS.PrecioPrestaciones.FindById(aux);
                            if (pPOld == null)
                            {
                                pP.Save(oS);
                                cP.Add(pP);

                            }
                            else if (pPOld.Precio != pP.Precio)
                            {
                                pP.SaveUpdate(oS);
                                cP.Add(pP);
                            }
                        }
                    }
                    ind++;
                }
                
               
                
            }
            ColeccionObrasSociales.Current.Clear();
            ColeccionObrasSociales.Current = null;
            this.Close();
        }

        private void frmABMObraSocial_Load(object sender, EventArgs e)
        {
            int i = 0;
            //oS.CodigoPostal = txtCodPostal.Text;
            //oS.Domicilio = txtDireccion.Text;
            //oS.Fax = txtFax.Text;
            //oS.Localidad = txtLocalidad.Text;
            //oS.Mail = txtMail.Text;
            //oS.NombreObra = txtNombre.Text;
            //oS.Telefono = txtTelefono.Text;

            if (IsUpdate)
            {
                if (oS.PrecioPrestaciones != null)
                {
                    foreach (var item in oS.PrecioPrestaciones)
                    {
                        dgvPrestaciones.Rows.Add();
                        dgvPrestaciones[0, i].Value = item.Prestacion.IdPrestacion.ToString();
                        dgvPrestaciones[1, i].Value = item.Prestacion.Detalle;
                        dgvPrestaciones[2, i].Value = item.Precio.ToString();
                        i++;

                    }
                }
            }
            else {
                oS = new ObraSocial();
            }
#warning esto es totalmente antiperformante

            foreach (var item in ColeccionPrestaciones.Current)
            {
                if (oS.PrecioPrestaciones == null) {

                    dgvPrestaciones.Rows.Add();
                    dgvPrestaciones[0, i].Value = item.IdPrestacion.ToString();
                    dgvPrestaciones[1, i].Value = item.Detalle;
                    i++;                
                }
                else if (!oS.PrecioPrestaciones.isIn(item.IdPrestacion)) {
                    dgvPrestaciones.Rows.Add();
                    dgvPrestaciones[0, i].Value = item.IdPrestacion.ToString();
                    dgvPrestaciones[1, i].Value = item.Detalle;                    
                    i++;                
                }
            }


            
        }

        private void cmdCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
